{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第八章　随机游走（Random Walk）\n",
    "\n",
    "\n",
    "作者：[王何宇](http://person.zju.edu.cn/wangheyu)\n",
    "\n",
    "[浙江大学数学科学学院](http://www.math.zju.edu.cn)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "随机游走就是无规则地在状态空间行走，它可以是基于长期历史行为的，因此我们讨论到目前为止的马尔可夫链可以认为是一个状态空间中的随机游走，但随机游走未必是一个马尔可夫链。我们这一章讨论简单的随机游走模型，以及它如何在金融模型中发挥作用。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 布朗运动\n",
    "\n",
    "这是大家熟悉的一种自然现象。也可以认为是现代自然科学的一个起源。它的出发点是观察到微粒在液体中受分子热运动的影响，做无规则的位移。本质上，如果把微粒的空间位置看作是一个概率分布，则布朗运动可以看作是在状态空间中的一种扩散。\n",
    "\n",
    "我们从最简单的一维布朗运动入手，并将连续的空间简化成直线上的整点，而微粒每一次的无规则位移，都以相等的概率，也就是 $p = q = \\frac{1}{2}$ 向左或向右移动。也就是每一个 $\\Delta x$ 都设为定值，那么实际上微粒的最终位置服从二项分布："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from __future__ import print_function, division\n",
    "\n",
    "# 这句话是非标准的python，用于ipthon或jupyter这样的系统中，表示绘图即刻自动展开。\n",
    "%matplotlib inline\n",
    "\n",
    "# 这里把全部Warning过滤掉了. \n",
    "# 参见https://docs.python.org/2/library/warnings.html\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')\n",
    "from scipy import stats\n",
    "import numpy as np\n",
    "import sys\n",
    "import matplotlib.pyplot as plt\n",
    "#np.random.seed(250)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "nSteps = 30\n",
    "nTrials = 800000\n",
    "S = np.zeros(nTrials)\n",
    "for i in range(nTrials):\n",
    "    x = 2 * (np.random.rand(nSteps) < 0.5) - 1\n",
    "    S[i] = np.sum(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.figure\n",
    "plt.hist(S, bins = 51);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 随机游走的连续化\n",
    "\n",
    "我们已经注意到，随机游走和马尔可夫链不一样的关注点在于随机游走关心的是一种空间位置的连续变化。尽管这种连续变化本身是随机的。但空间的连续性仍然得到体现，比如上述随机模拟尽管是离散的，但在多次统计中实际上呈现出来的是正态分布，而这一点除了二项分布和正态分布分布的关系之外，也可以直接从布朗运动的模型得到。\n",
    "\n",
    "我们首先将时间和空间都离散化，设每个时间单位是微元 $\\Delta t$，而每个空间位移是微元 $\\Delta x$。微粒从原点出发，在每个时间步，以 $p$ 的概率向右移动一步 $\\Delta x$，或以 $q = 1 - p$ 的概率向左移动一步 $\\Delta x$。经过 $n$ 个时间步后，粒子可能的分布范围是区间 $[-n \\Delta x, n \\Delta x]$。\n",
    "\n",
    "现令 $P(m, n)$ 表示粒子在 $n$ 个时间步后，位于 $x = m \\Delta x$ 的概率，则有\n",
    "$$\n",
    "P(m, n) = C_n^r p^r q^{n - r},\n",
    "$$\n",
    "其中 $r$ 代表粒子向右移动的步数，而 $l$ 代表粒子向左移动的步数，并且有\n",
    "$$\n",
    "m = r - l, n = r + l, \n",
    "$$\n",
    "或等价地\n",
    "$$\n",
    "r = \\frac{1}{2}(n + m), l = \\frac{1}{2}(n - m).\n",
    "$$\n",
    "注意到 $r$ 实际就是二项分布，故粒子位置的均值 $\\mu$ 为\n",
    "$$\n",
    "\\mu = E[m] = E[2r - n] = 2 E[r] - n = 2np - n = (2p - 1)n;\n",
    "$$\n",
    "而粒子位置的方差为：\n",
    "$$\n",
    "\\mathrm{var}(m) = \\mathrm{var}(2r - n) = 4 \\mathrm{var}(r) = 4npq; \n",
    "$$\n",
    "以及标准差为：\n",
    "$$\n",
    "\\sigma = \\sqrt{\\mathrm{var}(m)} = \\sqrt{4npq}.\n",
    "$$\n",
    "所以对 $p = q = \\frac{1}{2}$，我们有粒子到达的平均位置是 $0$。而粒子的扩散范围和 $\\sqrt{n}$ 成正比，或者说，和 $\\frac{\\Delta x^2}{\\Delta t}$ 成正比（在连续空间中）。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由中心极限定理，令 $\\Delta x, \\Delta t \\to 0$, $p(x, t)$ 代表一个布朗运动在 $t$ 时刻位于 $x$ 点的概率密度，则有\n",
    "$$\n",
    "p(x, t) = \\frac{P(m, n)}{\\Delta x} = \\frac{1}{\\sqrt{4 \\pi D t}} e^{-\\frac{x^2}{4Dt}},\n",
    "$$\n",
    "其中 $D$ 是 $\\frac{\\Delta x^2}{\\Delta t}$ 的极限，即扩散系数。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这是微分方程\n",
    "$$\n",
    "\\left\\{\n",
    "\\begin{array}{rcl}\n",
    "\\displaystyle \\frac{\\partial p}{\\partial t} &=& \\displaystyle D \\frac{\\partial^2 p}{\\partial x^2} \\\\\n",
    "p(x, 0) & = & \\delta(x)\n",
    "\\end{array}\n",
    "\\right.\n",
    "$$\n",
    "的解，其中 $\\delta(x)$ 是狄拉克函数，满足：\n",
    "$$\n",
    "\\int_{-\\infty}^\\infty \\delta(x) = 1,\n",
    "$$\n",
    "并且当 $x \\neq 0$ 时，有\n",
    "$$\n",
    "\\delta(x) = 0.\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这其实就是一维热传导方程，描述的就是自然界的最基本现象之一：热运动下的扩散。考虑到布朗运动本质就是分子热运动的一个结果，因此蕴含了这样的模型结果并不让人感到奇怪。这里初值代表当 $t = 0$ 时，微粒的空间位置是确定的 $x = 0$，爱因斯坦引入狄拉克函数表达初值非常直观。而 $D$ 就是热传导系数。取 $D = 1$，我们可以用 Python 的符号运算系统验证："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sympy as sym\n",
    "from sympy import pprint, Symbol, exp, sqrt, pi, diff, simplify\n",
    "from sympy import init_printing\n",
    "\n",
    "init_printing(use_unicode=True)\n",
    "\n",
    "x = Symbol('x')\n",
    "t = Symbol('t')\n",
    "p = 1 / (sqrt(4 * pi * t)) * exp(- x**2 / (4 * t))\n",
    "simplify(diff(p, t) - diff(p, x, 2))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "所以本质上，随机游走模型就提供了一种模拟连续扩散行为的模型和模拟算法。特别是对于金融等随机占优的情形，它可以分析随机行为背后的连续性，从而作出正确的预测（投机）。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 常返性（recurrence）\n",
    "\n",
    "如果一个微粒，当步长 $n \\to \\infty$ 时，它回到初值点的概率是 $1$，那么这个随机游走被称为是常返的。对于一个空间各项游走概率对称的随机游走，是否常返，本质上是由概率空间丰富程度决定的。比如对简单的一维离散空间，记 $q_0$ 为从原点出发，永不返回的概率，则返回原点的概率是 $p_0 = 1 - q_0$。类似地，以 $q_i$ 记录从 $x = i$ 出发，永不返回的概率，显然，对于无限长直线，它们初始位置的差异会消失，也即可以记 $ q_i = q, \\forall i$。\n",
    "\n",
    "不妨设粒子左右移动的概率都是 $\\frac{1}{2}$。考虑 $q_0$ 事件包含两个对称的子事件：向左永不返回和向右永不返回。因此向右永不返回的概率是 $\\frac{q_0}{2}$。这一子事件要发生，首先粒子要从 $x = 0$ 出发，走一步到 $x = 1$，这一概率是 $\\frac{1}{2}$。而 $q_1$ 同样包含这两个子事件，如果从 $x = 1$ 开始向右不返回，则就有从 $x = 0$ 出发向右不返回发生，因此：\n",
    "$$\n",
    "\\frac{q_0}{2} = \\frac{1}{2} \\frac{q_1}{2}.\n",
    "$$\n",
    "如此递推，有\n",
    "$$\n",
    "\\frac{q_0}{2} = \\frac{1}{2} \\frac{q_1}{2} = \\frac{1}{2} \\left(\\frac{1}{2} \\frac{q_2}{2}\\right) = \\cdots = \\left(\\frac{1}{2}\\right)^n \\frac{q_n}{2}  \\to 0, n \\to \\infty,\n",
    "$$\n",
    "也即 $p_0 = 1 - q_1 = 1$，所以一维离散空间的布朗运动是常返的。可以证明，一、二维连续布朗运动也是常返的，但三维就不是。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数学模型\n",
    "\n",
    "布朗运动的数学模型是由控制论之父维纳提出，因此又被称为维纳过程。一个一维布朗运动定义如下：\n",
    "\n",
    "设 $W_t$ 是一随时间 $t$ 变化的随机变量，称它是一个一维布朗运动。若它满足：\n",
    "\n",
    "1. $W_0 = 0$;\n",
    "2. 对于 $0 \\leq t_1 < t_2 < \\cdots < t_n$，增量 $W_{t_2} - W_{t_1}$，$W_{t_3} - W_{t_2}$，$\\cdots$，$W_{t_n} - W_{t_{n - 1}}$ 是相互独立的；\n",
    "3. 对于 $0 \\leq s < t$，$W_t - W_s$ 是均值为 $0$，方差为 $c(t - s)$ 的正态分布，其中 $c$ 是一固定常数，刻画了该布朗运动的特征。特别低，对 $c = 1$，称标准布朗运动。\n",
    "\n",
    "布朗运动的轨迹是连续的，但由定义，它处处都是**新的开始**，因此本质上不存在微分的概念，所以也就不可能对它的变化进行预测。（我们能预测随机变量的特征，但不能对随机变量本身进行预测。这才是“随机”的本意。）\n",
    "\n",
    "该模型定义可以自然延伸到多维。但要注意第 3 条中，多维正态分布\n",
    "$$\n",
    "f(x, \\mu, \\Sigma) = \\frac{1}{\\sqrt{|\\Sigma|(2 \\pi)^d}} e^{-\\frac{1}{2}(x - \\mu)^T\\Sigma^{-1}(x - \\mu)}\n",
    "$$\n",
    "中，均值 $\\mu$ 是 $d$ 维向量，并且 $\\Sigma$ 是 $d$ 阶协方差矩阵，它代表了各分量之间的相关性。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**例** 二维布朗运动的模拟。这里假设两个分量是完全不相关的，于是 $W_t - W_s$ 的协方差矩阵是\n",
    "$$\n",
    "\\left(\n",
    "\\begin{array}{cc}\n",
    "2(t - s) & 0 \\\\\n",
    "0 & 2(t - s)\n",
    "\\end{array}\n",
    "\\right).\n",
    "$$\n",
    "我们每一步的位移都通过一个二维正态分布来抽取。先看一个完整的 $1000$ 步二维布朗运动："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "sig = 2\n",
    "nSteps = 1000;\n",
    "MU = np.array([0, 0])\n",
    "SIGMA = np.array([[sig, 0], [0, sig]])\n",
    "R = np.random.multivariate_normal(MU, SIGMA, nSteps)\n",
    "x = np.zeros(nSteps + 1)\n",
    "y = np.zeros(nSteps + 1)\n",
    "for i in range(1, nSteps + 1):\n",
    "    x[i] = x[i - 1] + R[i - 1, 0]\n",
    "    y[i] = y[i - 1] + R[i - 1, 1]\n",
    "plt.figure\n",
    "plt.plot(x, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在对 $1000$ 布朗运动的终点做一个统计："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "nWalks = 1000\n",
    "x_end = np.zeros(nWalks)\n",
    "y_end = np.zeros(nWalks)\n",
    "for j in range(nWalks):\n",
    "    R = np.random.multivariate_normal(MU, SIGMA, nSteps)\n",
    "    x_end[j] = x[0] + sum(R[:, 0])\n",
    "    y_end[j] = y[0] + sum(R[:, 1])\n",
    "plt.plot(x_end, y_end, '.')\n",
    "plt.axis(\"equal\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 随机游走的应用\n",
    "\n",
    "至此，我们已经对随机游走中的布朗运动模型有了初步的认识。我们可以使用这种模型来模拟一个随机事件。表现它在概率空间中的扩散。\n",
    "\n",
    "### 金融期权定价\n",
    "\n",
    "期权是金融市场的一种衍生品。它本质上是一份预先签署的金融合同（收购或卖出）价值的兑现。一份金融合同，严格上说，本身只有提供合同服务的价值，因为金融产品也是等价交换原则的，所以没有兑现空间。但是由于金融产品本身一直在波动，而合同从签署到执行，中间的时间差可能导致执行时的金融产品价值高于或者低于执行价格，从而形成了合同本身的价值。这部分价值实际上是风险的表现，而将一份还未到期的合同本身拿去兑现和交易，其根本目的就是通过对赌行为，放大或减小风险。这里放大风险的目的在于博取更高收益，而减小风险则是为了稳定收益。根据赌博方向不同，期权又分为看涨期权（金融产品未来高于当前价格，因此预先签署以当前约定价格购买的合约）；以及看跌期权（预先签署以当前约定价格出售合约）。由此可见，一份金融期权交易涉及到的因素其实非常复杂，有金融产品本身价格波动、合约的约定执行时间、合约的执行价格、违约的代价、同时期银行利息、签署和执行合同的成本等等。在不同的金融市场，上述规则也不一致，因此又分出美式期权、欧式期权等等（未来必然会有中式期权）。所以如何为期权产品定价，是一个非常复杂的问题。这个问题即宏观，也微观，是一个政策执行者和金融交易员都关心的问题。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**有效市场假设** 股票（或）在短时间内的价格涨落是完全随机的。\n",
    "\n",
    "基于该假设，我们给出股票的基本演化方程：\n",
    "$$\n",
    "\\frac{\\Delta S_t}{S_t} = \\mu \\Delta t + \\sigma \\Delta W_t,\n",
    "$$\n",
    "其中 $\\Delta W_t = W_{t + \\Delta t} - W_t$ 是标准布朗运动，$\\mu$ 和 $\\sigma$ 是特征参数，称为**漂移率**和**波动率**。上述方程也被称为**几何布朗运动**或**伊藤（Ito）过程**。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从计算机模拟的角度，我们将上述方程改为：\n",
    "$$\n",
    "\\Delta S_t = \\mu S_t \\Delta t + \\sigma S_t \\sqrt{\\Delta t} \\varepsilon,\n",
    "$$\n",
    "其中 $\\varepsilon$ 是标准正态分布随机变量。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**风险中性定价** 所谓富贵险中求，没有风险，那么收益也就只能是无风险产品（定期存款、政府债券）的收益。额外的收益必须承担额外的风险。这个原则也可以用于定价。任何一份期权，我们都可以在卖出一份期权的同时购买一份对冲的金融产品来抵消全部风险，使得它的最终收益和一份无风险产品持平。比如对应看涨期权，我们以价格 $f$ 卖出一份看涨期权，然后去买入 $\\frac{\\Delta f}{\\Delta S}$ 这么多量的对应股票，那么期权收益正好平衡和股票涨跌。我们记一个无风险组合产品为 $\\Pi$，同期政府债券的收益率为 $r$，那么有\n",
    "$$\n",
    "\\Pi = -f + \\frac{\\Delta f}{\\Delta S}S.\n",
    "$$\n",
    "这里 $f$ 是 $S$ 和 $t$ 的函数 $f(S, t)$。如果股票价格从 $t_0$ 变化到 $t_1$，那么\n",
    "$$\n",
    "\\Pi_1 - \\Pi_0 = f_0 - f_1 + \\frac{\\Delta f}{\\Delta S}\\Delta S = 0.\n",
    "$$\n",
    "也就是对我们而言，这个期权和股票都等于白做了，而此时的资金收益等价于政府债券（一顿操作猛如虎，躺在家里吃利息），也即\n",
    "$$\n",
    "\\frac{\\Delta \\Pi}{\\Pi} = r \\Delta t.\n",
    "$$\n",
    "这里要注意，$\\Delta S = S(t + \\Delta t) - S(t)$，其他如 $\\Delta f$，$\\Delta \\Pi$ 都是这个意义。将 $\\Delta f$ 做 Taylor 展开到二阶，即得所谓的伊藤公式：\n",
    "$$\n",
    "\\Delta f = \\frac{\\partial f}{\\partial t}\\Delta t + \\frac{\\partial f}{\\partial S}\\Delta S + \\frac{1}{2}\\frac{\\partial^2 f}{\\partial S^2}(\\Delta S)^2.\n",
    "$$\n",
    "再代入伊藤过程，有\n",
    "$$\n",
    "(\\Delta S)^2 = (\\mu S \\Delta t + \\sigma S \\sqrt{\\Delta t} \\varepsilon)^2 = \\sigma^2 S^2 \\varepsilon^2 \\Delta t + o(\\Delta t).\n",
    "$$\n",
    "略去 $\\Delta t$ 高阶项，已及由 $E[\\varepsilon^2] = 1$, 令 $\\varepsilon^2 \\approx 1$，有\n",
    "$$\n",
    "(\\Delta S)^2 \\approx \\sigma^2 S^2 \\Delta t.\n",
    "$$\n",
    "（股票的走势，狗头...）将这一结果代入无风险产品，有\n",
    "\n",
    "$$\n",
    "\\begin{array}{rcl}\n",
    "\\Delta \\Pi &=& \\displaystyle -\\Delta f + \\frac{\\partial f}{\\partial S} \\Delta S \\\\ \n",
    "&=& \\displaystyle -\\left(\\frac{\\partial f}{\\partial t}\\Delta t + \\frac{\\partial f}{\\partial S}\\Delta S + \\frac{1}{2} \\frac{\\partial^2 f}{\\partial S^2}(\\Delta S)^2\\right) + \\frac{\\partial f}{\\partial S}\\Delta S \\\\\n",
    "&=& \\displaystyle -\\frac{\\partial f}{\\partial t}\\Delta t - \\frac{1}{2}\\frac{\\partial^2 f}{\\partial S^2}(\\Delta S)^2 \\\\\n",
    "&=& r\\Pi\\Delta t = -r f\\Delta t + \\displaystyle rS\\frac{\\partial f}{\\partial S}\\Delta t.\n",
    "\\end{array}\n",
    "$$\n",
    "再代入股票价格模型，有\n",
    "$$\n",
    "\\frac{\\partial f}{\\partial t} + rS\\frac{\\partial f}{\\partial S} + \\frac{1}{2}S^2\\frac{\\partial^2 f}{\\partial S^2} = rf,\n",
    "$$\n",
    "这就是**布莱克-肖尔斯方程（Black-Scholes equations）**。这个定价模型的基本思想就是虚构一个组合对冲，去逼近一个无风险产品，然后在这种平衡中，以无风险收益 $r$ 为基础，概率量化了风险和收益。这一思想被广泛应用在现代金融产品定价中。在推导过程中，我们看到无风险组合产品的价格变化为：\n",
    "$$\n",
    "\\Delta \\Pi = -\\left(\\frac{\\partial f}{\\partial t} + \\frac{1}{2}\\sigma^2 S^2\\frac{\\partial^f}{\\partial S^2}\\right)\\Delta t.\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "现在以欧式期权为例（执行合同必须到期执行，中间允许转让合同，到期允许不执行合同），一个期权到期的价值为：\n",
    "$$\n",
    "V = \\max\\{S_T - K, 0\\},\n",
    "$$\n",
    "其中 $T$ 是到期日，$S_T$ 是到期日股票实际价格，$K$ 是合同约定价格。于是在到期日之前，按无风险投资贴现的期权本身价格就是\n",
    "$$\n",
    "P = (1 + r)^{-T}V.\n",
    "$$\n",
    "这里一个问题是如何估计 $V$，也就是 $S_T$。一个办法是用计算机模拟：\n",
    "$$\n",
    "V \\approx \\frac{1}{N}\\sum_{i = 1}^N \\max\\{S_T(i) - K, 0\\}.\n",
    "$$\n",
    "也就是用多次随机测试的结果的均值来估计，而 $S_T(i)$ 这里可以采用之前的股票价格模型，其中 $\\sigma$ 从该股票历史行为中提取，而漂移率 $\\mu$ 则直接用 $r$ 替代，因为在最终的布莱克-肖尔斯方程中，并不存在 $\\mu$，也就是说期权的价格，实际来源于对波动的投机，其本身的期望增长，其实无影响（并没有垃圾股或者绩优股，只是一场赌博）。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**例** 一个 $T = 90$ 天的欧式看涨期权，股票当前价格 $S_0 = 20$，年波动率为 $\\sigma = 0.6$，约定价格为 $K = 25$，无风险年利率 $r = 0.031$，下面用布朗运动给出期权本身价格的模拟："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "nDays = 90\n",
    "dt = 1/365\n",
    "T = nDays * dt\n",
    "S0 = 20\n",
    "K = 25\n",
    "r = 0.031\n",
    "sigma = 0.6\n",
    "expTerm = r * dt               # 股票的利息收入\n",
    "stddev = sigma * np.sqrt(dt)   # 股票一步漂移\n",
    "nTrials = 100000\n",
    "ST = np.zeros(nTrials)\n",
    "value = 0\n",
    "for j in range(nTrials):\n",
    "    n = np.random.randn(nDays)\n",
    "    S = S0\n",
    "    for i in range(nDays):\n",
    "        dS = S * (expTerm + stddev * n[i])\n",
    "        S = S + dS\n",
    "    ST[j] = S\n",
    "    value = value + np.max([S - K, 0])\n",
    "value = value / nTrials\n",
    "Price = np.power(1 + r, -T) * value\n",
    "plt.hist(ST, bins = 130)\n",
    "print(\"value: \", value)\n",
    "print(\"Price:\", Price)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这里还有一个估值办法是数值求解布莱克-肖尔斯方程，当然这个就是经典的微分方程数值解的应用了。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 随机游走应用概述\n",
    "\n",
    "随机游走模型大量运用于此类带博彩性质的数值模拟中。同时它也提供了随机微分方程的一种数值求解手段。除此以外，还有一种潜在的应用是走迷宫。一般当迷宫规模不大时，我们可以采取深度优先或广度优先算法。然而对于高纬度，大规模的迷宫，遍历算法的代价超过了实际计算能力。此时随机游走模型相当于提供了一条在现有算力限制下，在概率空间意义上均匀扩散探索的计算方式。很多实际应用问题，如药物设计，晶体结构等等，都可以通过等价变换在这种模型下求解。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
